Index: netcat-openbsd-1.89/netcat.c
===================================================================
--- netcat-openbsd-1.89.orig/netcat.c	2008-01-22 16:17:17.000000000 -0500
+++ netcat-openbsd-1.89/netcat.c	2008-01-22 16:17:18.000000000 -0500
@@ -67,7 +67,7 @@
 
 /* Command Line Options */
 int	dflag;					/* detached, no stdin */
-unsigned int iflag;				/* Interval Flag */
+int	iflag;					/* Interval Flag */
 int	jflag;					/* use jumbo frames if we can */
 int	kflag;					/* More than one connect */
 int	lflag;					/* Bind to local port */
@@ -108,13 +108,13 @@
 main(int argc, char *argv[])
 {
 	int ch, s, ret, socksv;
-	char *host, *uport;
+	char *host, *uport, *endp;
 	struct addrinfo hints;
 	struct servent *sv;
 	socklen_t len;
 	struct sockaddr_storage cliaddr;
 	char *proxy;
-	const char *errstr, *proxyhost = "", *proxyport = NULL;
+	const char *proxyhost = "", *proxyport = NULL;
 	struct addrinfo proxyhints;
 
 	ret = 1;
@@ -122,6 +122,7 @@
 	socksv = 5;
 	host = NULL;
 	uport = NULL;
+	endp = NULL;
 	sv = NULL;
 
 	while ((ch = getopt(argc, argv,
@@ -153,9 +154,9 @@
 			help();
 			break;
 		case 'i':
-			iflag = strtonum(optarg, 0, UINT_MAX, &errstr);
-			if (errstr)
-				errx(1, "interval %s: %s", errstr, optarg);
+			iflag = (int)strtoul(optarg, &endp, 10);
+			if (iflag < 0 || *endp != '\0')
+				errx(1, "interval cannot be negative");
 			break;
 		case 'j':
 			jflag = 1;
@@ -191,9 +192,11 @@
 			vflag = 1;
 			break;
 		case 'w':
-			timeout = strtonum(optarg, 0, INT_MAX / 1000, &errstr);
-			if (errstr)
-				errx(1, "timeout %s: %s", errstr, optarg);
+			timeout = (int)strtoul(optarg, &endp, 10);
+			if (timeout < 0 || *endp != '\0')
+				errx(1, "timeout cannot be negative");
+			if (timeout >= (INT_MAX / 1000))
+				errx(1, "timeout too large");
 			timeout *= 1000;
 			break;
 		case 'x':
@@ -680,8 +683,7 @@
 void
 build_ports(char *p)
 {
-	const char *errstr;
-	char *n;
+	char *n, *endp;
 	int hi, lo, cp;
 	int x = 0;
 
@@ -693,12 +695,12 @@
 		n++;
 
 		/* Make sure the ports are in order: lowest->highest. */
-		hi = strtonum(n, 1, PORT_MAX, &errstr);
-		if (errstr)
-			errx(1, "port number %s: %s", errstr, n);
-		lo = strtonum(p, 1, PORT_MAX, &errstr);
-		if (errstr)
-			errx(1, "port number %s: %s", errstr, p);
+		hi = (int)strtoul(n, &endp, 10);
+		if (hi <= 0 || hi > PORT_MAX || *endp != '\0')
+			errx(1, "port range not valid");
+		lo = (int)strtoul(p, &endp, 10);
+		if (lo <= 0 || lo > PORT_MAX || *endp != '\0')
+			errx(1, "port range not valid");
 
 		if (lo > hi) {
 			cp = hi;
@@ -729,9 +731,9 @@
 			}
 		}
 	} else {
-		hi = strtonum(p, 1, PORT_MAX, &errstr);
-		if (errstr)
-			errx(1, "port number %s: %s", errstr, p);
+		hi = (int)strtoul(p, &endp, 10);
+		if (hi <= 0 || hi > PORT_MAX || *endp != '\0')
+			errx(1, "port range not valid");
 		portlist[0] = calloc(1, PORT_MAX_LEN);
 		if (portlist[0] == NULL)
 			err(1, NULL);
